Kafka学习笔记(一):什么是消息队列?什么是Kafka?

您所在的位置:网站首页 kafka 点对点 Kafka学习笔记(一):什么是消息队列?什么是Kafka?

Kafka学习笔记(一):什么是消息队列?什么是Kafka?

2024-06-12 03:23| 来源: 网络整理| 查看: 265

目录 一、消息队列的概述(一)前置知识点1、集群和分布式2、队列(Queue)的含义3、同步与异步的含义 (二)消息队列的含义与特点 二、Kafka(一) 概述(二) 常用名词含义 导航栏

一、消息队列的概述 (一)前置知识点 1、集群和分布式 集群:同一业务部署在多台服务器上或者不同的服务节点上。分布式:一个业务被拆分为多个子业务部署在不同的服务器上或者不同的服务节点上。

[举个例子]:汽车部件有轮子,发动机等。有生产轮子的车间,生产发动机的车间。同时,生产发动机的车间又有多个生产小组。那么汽车各种部件的生产车间就构成了分布式;生产发动机的车间里的多个生产小组构成了集群。

2、队列(Queue)的含义

首先队列是一种数据结构,是一种特殊的线性表,其特点是先进先出。允许插入的一端称为队尾,允许删除的一端称为队头。图片如下: 在这里插入图片描述

3、同步与异步的含义 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。 (二)消息队列的含义与特点

消息队列,一般我们会简称它为MQ(Message Queue),也叫消息中间件,是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削峰等问题,目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。

下面谈谈个人对其特点的理解:

解耦:假设系统A(A)是个用户管理系统,外界系统需要使用到系统A中的用户身份信息,便于其他系统使用。现在有系统B(B),系统C(C)需要用到A的用户信息,所以可能需要A在新增用户后将新增用户的信息以接口调用的方式发送给B和C。如果哪天B和C的接口发生改变,这样就导致了A需要同步修改调用接口。B和C要是出现用户匹配不上,可能还需要A来辅助帮忙排查问题。系统之间的耦合度是非常高的。所以,引入消息队列后,A只需要将新增用户信息放到消息队列中,其他不需要问了。B和C只要监听对应的主题,去取就好了。要是B和C遇到相关用户关联不上的问题,那只需要排查到消息队列有没有对应的消息就可以了。从此之后,系统A中的小伙伴们能省不少时间去划水摸鱼了。 在这里插入图片描述

异步:还拿上面的例子来说,当系统A录入一个新的用户时,是需要同步发送系统B和系统C的,是一个线性操作。发送C之前需要发送给B,然后得到B的响应后才能发送给C。所以C收到时间会和B挂钩,然而B和C是完全不相干的系统,这样对C是不是不公平。但是当A将新增用户直接扔到MQ里面,B和C两个都能同时取到。这样大家都好,就很nice。 在这里插入图片描述

削峰:换个例子,比如PDD电商平台0元抢购最新苹果手机(限量一台)活动时,有订单系统A。假设系统A中集群(假设三台物理机)的每台机器最大并发只支持1000的request,负载均衡后,系统A最大支持3000的并发量了。好家伙,遇到便宜傻子才不占。一下有10000个请求同一时间过来了。系统A只能处理3000条,多出来的7000条请求承受不了(liao)了(le),然后,系统A凉凉,这10000个人手机上就显示了[系统异常,请稍后重试!]。还抢购个鸡毛啊,he tui 。但是系统A加入消息队列后,请求发送到MQ中,系统A可以按照每秒3000去处理,也可以按照每秒2000去处理。嗯,先到先得,有一个人抢到了。9999人收到了消息[抱歉,没有抢到哦,充值VIP可以增加抢购概率哦],然后就有傻子去充会员了。 在这里插入图片描述

引用知乎的一个回答帮助大家更好理解什么是解耦、异步、削峰的概念:点击此处跳转

二、Kafka

在这里插入图片描述

(一) 概述

Kafka是一个分布式系统,由通过高性能TCP网络协议进行通信的服务器和客户端组成。它可以部署在内部以及云环境中的裸机硬件,虚拟机和容器上。

在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外 kafka集群有多个kafka实例组成,每个实例(server)称为broker。无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

APACHE KAFKA官网

(二) 常用名词含义

消息处理过程:消息由producer产生,消息按照topic归类,并发送到broker中,broker中保存了一个或多个topic的消息,consumer通过订阅一组topic的消息,通过持续的pull操作从broker获取消息,并进行后续的消息处理。

在这里插入图片描述

名词解释Producer消息的生成者Consumer消息的消费者ConsumerGroup消费者组,可以并行消费Topic中的partition的消息Broker缓存代理,Kafka集群中的一台或多台服务器统称brokerTopicKafka处理资源的消息源(feeds of messages)的不同分类PartitionTopic物理上的分组,一个topic可以分为多个partion,每个partion是一个有序的队列。partion中每条消息都会被分配一个 有序的Id(offset)Offset偏移量,消费者在消费消息时,对应topic其中的一个分区partition的读取位置,可以理解为指针。Message消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息Producers消息和数据生成者,向Kafka的一个topic发布消息的 过程叫做producersConsumers消息和数据的消费者,订阅topic并处理其发布的消费过程叫做consumers 导航栏

Kafka学习笔记(二):Zookeeper 在 Kafka 中的作用 Kafka学习笔记(三):Kafka和其他常见消息队列的对比 Kafka学习笔记(四):在Ubuntu18.04上搭建kafka的环境 Kafka学习笔记(五):kafka的常用命令及工具KafkaTool学习 Kafka学习笔记(六):Kafka集成在SpringBoot2.x项目中



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3